home *** CD-ROM | disk | FTP | other *** search
- #! /bin/sh -
-
- RCSID='$Id: MAKEDEV 2.2 1995/05/21 17:55:14 alfie Exp $'
-
- #---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#
- # Customisation:
- # The devices fall into various classes. This section contains the mapping
- # from a class name into a group name and permission.
- # You will almost certainly need to edit the group name to match your
- # system, and you may change the permissions to suit your preference. These
- # lines _must_ be of the format "user group perm".
-
- public=" root system 666"
- system=" root system 660"
- kmem=" root kmem 660"
- tty=" root tty 666"
- cons=" root tty 622" # 622 for console?
- vcs=" root system 600"
- dialout=" root uucp 660"
- mouse=" root system 666"
- printer=" root daemon 660"
- floppy=" root floppy 660"
- disk=" root disk 660"
- scsi=" root system 600"
- cdrom=" root disk 660"
- tape=" root disk 660"
- audio=" root system 666"
- ibcs2=" root system 666"
- scanner=" root system 666"
-
- MAXVT=8
-
- #---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#
-
- procfs=/proc
-
- opt_v=
- opt_d=
- opt_n=
-
- while [ $# -ge 1 ]
- do
- case $1 in
- --) shift; break ;;
- -v) shift; opt_v=1 ;;
- -d) shift; opt_d=1 ;;
- -n) shift; opt_n=1; opt_v=1 ;;
- -V) shift; opt_V=1 ;;
- -*) echo "$0: unknown flag \"$1\"" >&2; exit 1 ;;
- *) break ;;
- esac
- done
-
- if [ "$opt_V" ]
- then
- echo "$RCSID"
- exit 0
- fi
-
- opts="${opt_n:+-n} ${opt_v:+-v} ${opt_d:+-d}"
-
- #---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#
-
- makedev () { # usage: makedev name [bcu] major minor owner group mode
- if [ "$opt_v" ]
- then if [ "$opt_d" ]
- then echo "delete $1"
- else echo "create $1 $2 $3 $4 $5:$6 $7"
- fi
- fi
- if [ ! "$opt_n" ]
- then if [ "$opt_d" ]
- then
- rm -f $1
- else
- mknod $1- $2 $3 $4 &&
- chown $5:$6 $1- &&
- chmod $7 $1- &&
- mv $1- $1
- fi
- fi
- }
- symlink () { # usage: symlink name target
- if [ "$opt_v" ]
- then if [ "$opt_d" ]
- then echo "delete $1"
- else echo "create $1 -> $2"
- fi
- fi
- [ ! "$opt_n" ] && rm -f $1 &&
- [ ! "$opt_d" ] && ln -s $2 $1
- }
-
- #---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#
-
- # For bash and ksh, we can use faster builtin routines to do manipulation,
- # otherwise (ash) fall back to slower method using `expr'.
- # The extra level of indirection using `eval' is necessary a) for ksh, and
- # b) to get past ash.
-
- if [ "$RANDOM" != "$RANDOM" ]
- then
- math () {
- eval echo "\$(($*))"
- }
- index () { # index string c
- eval "I=\${1%$2*}"
- eval echo "\${#I}"
- }
- suffix () {
- eval echo "\${1#$2}"
- }
- strip () {
- eval echo "\${1% $2 *} \${1#* $2 }"
- }
- else
- math () {
- expr "$@"
- }
- index () { # index string c
- expr $1 : ".*$2" - 1
- }
- suffix () {
- expr "$1" : "$2\(.*\)"
- }
- strip () {
- echo "[$1][$2]" >&2
- echo "`expr \"$1\" : \"\(.*\) $2 \"` `expr \"$1\" : \".* $2 \(.*\)\"`"
- }
- fi
-
- #---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#
-
- devices=
- if [ ! -f $procfs/devices ]
- then
- echo "$0: warning: can't read $procfs/devices" >&2
- else
- exec 3<$procfs/devices
- while read major device <&3
- do
- case "$major" in
- Character|Block|'')
- ;;
- *)
- eval "major_$device=$major"
- devices="$devices $device"
- ;;
- esac
- done
- exec 3<&-
- fi
-
- Major () {
- device=$2
- if [ "$opt_d" ]
- then
- echo -1 # don't care
- else
- eval echo \${major_$1:-\${device:?\"unknown major number for $1\"}}
- fi
- }
-
- cvt () {
- while [ $# -ne 0 ]
- do
- case "$1" in
- mem|tty|ttyp|cua|cub) ;;
- hd|ide0) echo hda hdb ;;
- ide1) echo hdc hdd ;;
- sd) echo sda sdb ;;
- sr) echo scd0 ;;
- st) echo st0 ;;
- xd) echo xda xdb ;;
- fd) echo fd0 fd1 ;;
- lp) echo lp ;;
- mt) echo ftape ;;
- loop) echo loop ;;
- md) echo md ;;
- ibcs2) echo ibcs2 ;;
- tpqic02) echo qic ;;
- sound) echo audio ;;
- logiscan) echo logiscan ;;
- ac4096) echo ac4096 ;;
- hw) echo helloworld ;;
- sbpcd | sbpcd[123]) echo $1 ;;
- Joystick) echo js ;;
- apm_bios) echo apm ;;
- dcf) echo dcf ;;
- aztcd) echo aztcd ;;
- pcmcia) ;; # taken care of by its own driver
- ttyC) echo cyclades ;;
- vcs) ;;
- *) echo "$0: don't know what \"$1\" is" >&2 ;;
- esac
- shift
- done
- }
-
- for arg
- do
- case $arg in
- generic)
- $0 $opts std
- $0 $opts fd
- $0 $opts fd0 fd1
- $0 $opts hda hdb
- $0 $opts xda xdb
- $0 $opts sda sdb
- $0 $opts ptyp ptyq ptyr ptys
- $0 $opts console
- $0 $opts ttyS0 ttyS1 ttyS2 ttyS3
- $0 $opts busmice
- $0 $opts lp
- $0 $opts par
- ;;
- local)
- $0.local $opts
- ;;
- std)
- makedev mem c 1 1 $kmem
- makedev kmem c 1 2 $kmem
- makedev null c 1 3 $public
- makedev port c 1 4 $kmem
- makedev zero c 1 5 $public
- symlink core $procfs/kcore
- makedev full c 1 7 $public
- makedev ram b 1 1 $disk
- makedev tty c 5 0 $tty
- ;;
- console)
- major=`Major vcs` # not fatal
- # console
- makedev tty0 c 4 0 $cons
- symlink console tty0
- [ "$major" ] && makedev vcs0 c $major 0 $vcs
- [ "$major" ] && makedev vcsa c $major 128 $vcs
- # individual vts
- line=1
- while [ $line -le $MAXVT -a $line -le 63 ]
- do
- makedev tty$line c 4 $line $tty
- [ "$major" ] && makedev vcs$line c $major $line $vcs
- [ "$major" ] && makedev vcsa$line c $major `math $line + 128` $vcs
- line=`math $line + 1`
- done
- ;;
- tty[1-9]|tty[1-5][0-9]|tty[6][0-3])
- line=`suffix $arg tty`
- makedev tty$line c 4 $line $tty
- ;;
- ttyS[0-9]|ttyS[1-5][0-9]|ttyS[6][0-3])
- line=`suffix $arg ttyS`
- minor=`math 64 + $line`
- makedev ttyS$line c 4 $minor $tty
- makedev cua$line c 5 $minor $dialout
- ;;
- pty[p-s])
- # Currently limited to 64 master/slave pairs.
- bank=`suffix $arg pty`
- base=`index pqrs $bank`
- base=`math $base \* 16`
- for i in 0 1 2 3 4 5 6 7 8 9 a b c d e f
- do
- j=`index 0123456789abcdef $i`
- makedev pty$bank$i c 4 `math 128 + $base + $j` $tty
- makedev tty$bank$i c 4 `math 192 + $base + $j` $tty
- done
- ;;
- cyclades)
- major1=`Major ttyC` || continue
- major2=`Major cub` || continue
- for i in 0 1 2 3 4 5 6 7 # 8 9 10 11 12 13 14 15
- do
- makedev ttyC$i c $major1 `math 32 + $i` $tty
- makedev cub$i c $major2 `math 32 + $i` $dialout
- done
- ;;
- lp)
- major=`Major lp` || continue
- makedev ${arg}0 c $major 0 $printer
- makedev ${arg}1 c $major 1 $printer
- makedev ${arg}2 c $major 2 $printer
- ;;
- par)
- major=`Major lp` || continue
- makedev ${arg}0 c $major 0 $printer
- makedev ${arg}1 c $major 1 $printer
- makedev ${arg}2 c $major 2 $printer
- ;;
- busmice)
- major=`Major mouse 10` || continue
- makedev logimouse c $major 0 $mouse
- makedev psmouse c $major 1 $mouse
- makedev msmouse c $major 2 $mouse
- makedev atimouse c $major 3 $mouse
- makedev jmouse c $major 4 $mouse
- ;;
- js)
- major=`Major Joystick` || continue
- makedev js0 c $major 0 $mouse
- makedev js1 c $major 1 $mouse
- ;;
- fd[0-7])
- major=`Major fd 2` || continue
- base=`suffix $arg fd`
- if [ $base -ge 4 ]
- then
- base=`math $base + 124`
- fi
- makedev ${arg} b $major $base $floppy
- makedev ${arg}d360 b $major `math $base + 4` $floppy
- makedev ${arg}h1200 b $major `math $base + 8` $floppy
- makedev ${arg}D360 b $major `math $base + 12` $floppy
- makedev ${arg}D720 b $major `math $base + 16` $floppy
- makedev ${arg}h360 b $major `math $base + 20` $floppy
- makedev ${arg}h720 b $major `math $base + 24` $floppy
- makedev ${arg}H1440 b $major `math $base + 28` $floppy
- makedev ${arg}E2880 b $major `math $base + 32` $floppy
- makedev ${arg}CompaQ b $major `math $base + 36` $floppy
-
- symlink ${arg}H360 ${arg}D360
- symlink ${arg}H720 ${arg}D720
-
- makedev ${arg}h1440 b $major `math $base + 40` $floppy
- makedev ${arg}H1680 b $major `math $base + 44` $floppy
- makedev ${arg}h410 b $major `math $base + 48` $floppy
- makedev ${arg}H820 b $major `math $base + 52` $floppy
- makedev ${arg}h1476 b $major `math $base + 56` $floppy
- makedev ${arg}H1722 b $major `math $base + 60` $floppy
- makedev ${arg}h420 b $major `math $base + 64` $floppy
- makedev ${arg}H830 b $major `math $base + 68` $floppy
- makedev ${arg}h1494 b $major `math $base + 72` $floppy
- makedev ${arg}H1743 b $major `math $base + 76` $floppy
- makedev ${arg}h880 b $major `math $base + 80` $floppy
- makedev ${arg}D1040 b $major `math $base + 84` $floppy
- makedev ${arg}D1120 b $major `math $base + 88` $floppy
- makedev ${arg}h1600 b $major `math $base + 92` $floppy
- makedev ${arg}H1760 b $major `math $base + 96` $floppy
- makedev ${arg}H1920 b $major `math $base + 100` $floppy
- makedev ${arg}E3200 b $major `math $base + 104` $floppy
- makedev ${arg}E3520 b $major `math $base + 108` $floppy
- makedev ${arg}E3840 b $major `math $base + 112` $floppy
- makedev ${arg}H1840 b $major `math $base + 116` $floppy
- makedev ${arg}D800 b $major `math $base + 120` $floppy
- makedev ${arg}H1600 b $major `math $base + 124` $floppy
- ;;
- hd[a-b])
- major=`Major ide0` || major=`Major hd 3` || continue
- unit=`suffix $arg hd`
- base=`index ab $unit`
- base=`math $base \* 64`
- makedev hd$unit b $major $base $disk
- for part in 1 2 3 4 5 6 7 8 # 9 10 11 12 13 14 15 16 17 18 19 20
- do
- makedev hd$unit$part b $major `math $base + $part` $disk
- done
- ;;
- hd[c-d])
- major=`Major ide1 22` || continue
- unit=`suffix $arg hd`
- base=`index cd $unit`
- base=`math $base \* 64`
- makedev hd$unit b $major $base $disk
- for part in 1 2 3 4 5 6 7 8 # 9 10 11 12 13 14 15 16 17 18 19 20
- do
- makedev hd$unit$part b $major `expr $base + $part` $disk
- done
- ;;
- xd[a-d])
- major=`Major xd 13` || continue
- unit=`suffix $arg xd`
- base=`index abcd $unit`
- base=`math $base \* 64`
- makedev xd$unit b $major $base $disk
- for part in 1 2 3 4 5 6 7 8 # 9 10 11 12 13 14 15 16 17 18 19 20
- do
- makedev xd$unit$part b $major `expr $base + $part` $disk
- done
- ;;
- sd[a-h])
- major=`Major sd 8` || continue
- unit=`suffix $arg sd`
- base=`index abcdefgh $unit`
- base=`math $base \* 16`
- makedev sd$unit b $major $base $disk
- for part in 1 2 3 4 5 6 7 8 # 9 10 11 12 13 14 15
- do
- minor=`expr $base + $part`
- makedev sd$unit$part b $major $minor $disk
- done
- ;;
- loop)
- major=`Major loop` || continue
- for part in 0 1 2 3 4 5 6 7
- do
- makedev loop$part b $major $part $disk
- done
- ;;
- md)
- major=`Major md` || continue
- for part in 0 1 2 3
- do
- makedev md$part b $major $part $disk
- done
- ;;
- st[0-7])
- major=`Major st 9`
- unit=`suffix $arg st`
- makedev st$unit c $major $unit $tape
- makedev nst$unit c $major `math 128 + $unit` $tape
- ;;
- qic)
- major=`Major tpqic02 12`
- makedev rmt8 c $major 6 $tape
- makedev rmt16 c $major 8 $tape
- makedev tape-d c $major 136 $tape
- makedev tape-reset c $major 255 $tape
- ;;
- ftape)
- major=`Major mt 27` || continue
- for unit in 0 1 2 3
- do
- makedev rft$unit c $major $unit $tape
- makedev nrft$unit c $major `math $unit + 4` $tape
- done
- symlink ftape rft0
- symlink nftape nrft0
- ;;
- scd[0-7])
- major=`Major sr 11` || continue
- unit=`suffix $arg scd`
- makedev scd$unit b $major $unit $cdrom
- ;;
- sonycd)
- major=`Major cdu31a` || continue
- makedev $arg b $major 0 $cdrom
- ;;
- mcd)
- major=`Major mcd 23` || continue
- makedev $arg b $major 0 $cdrom
- ;;
- cdu535)
- makedev $arg b 24 0 $cdrom
- ;;
- lmscd)
- makedev $arg b 24 0 $cdrom
- ;;
- sbpcd|sbpcd[123])
- major=`Major $arg` || continue
- base=`suffix ${arg}0 sbpcd`
- # base=`expr ${arg}0 : "sbpcd\(.\)"`
- for minor in 0 1 2 3
- do
- # XXX
- unit=`expr substr 0123456789abcdef \( $base \* 4 + $minor + 1 \) 1`
- makedev sbpcd$unit b $major $minor $cdrom
- done
- [ $arg = sbpcd ] && symlink $arg ${arg}0
- ;;
- aztcd)
- major=`Major $arg` || continue
- makedev ${arg}0 b $major 0 $cdrom
- ;;
- logiscan)
- major=`Major logiscan` || continue
- makedev $arg c $major 0 $scanner
- ;;
- m105scan)
- major=`Major m105` || continue
- makedev $arg c $major 0 $scanner
- ;;
- ac4096)
- major=`Major ac4096` || continue
- makedev $arg c $major 0 $scanner
- ;;
- audio)
- major=`Major sound 14`
- makedev mixer c $major 0 $audio
- makedev sequencer c $major 1 $audio
- makedev midi00 c $major 2 $audio
- makedev dsp c $major 3 $audio
- makedev audio c $major 4 $audio
- makedev sndstat c $major 6 $audio
- # makedev sequencer2 c $major 8 $audio
- makedev mixer1 c $major 16 $audio
- # makedev patmgr0 c $major 17 $audio
- makedev midi01 c $major 18 $audio
- makedev dsp1 c $major 19 $audio
- makedev audio1 c $major 20 $audio
- # makedev patmgr1 c $major 33 $audio
- makedev midi02 c $major 34 $audio
- makedev midi03 c $major 50 $audio
- ;;
- pcaudio)
- major=`Major pcsp` || continue
- makedev pcmixer c $major 0 $audio
- makedev pcsp c $major 3 $audio
- makedev pcaudio c $major 4 $audio
- ;;
- sg)
- major=`Major sg 21`
- for unit in a b c d e f g h
- do
- minor=`index abcdefgh $unit`
- # minor=`expr abcdefgh : ".*$unit" - 1`
- makedev $arg$unit c $major $minor $scsi
- done
- ;;
- fd)
- # not really devices, we use the /proc filesystem
- symlink fd $procfs/self/fd
- symlink stdin fd/0
- symlink stdout fd/1
- symlink stderr fd/2
- ;;
- ibcs2)
- major=`Major ibcs2` || continue
- makedev socksys c $major 0 $ibcs2
- symlink nfsd socksys
- makedev spx c $major 1 $ibcs2
- symlink X0R null
- ;;
- apm)
- major=`Major apm_bios` || continue
- makedev $arg c $major 0 $system
- ;;
- dcf)
- major=`Major dcf` || continue
- makedev $arg c $major 0 $system
- ;;
- helloworld)
- major=`Major hw` || continue
- makedev helloworld c $major 0 $public
- ;;
- update)
- if [ ! "$devices" ]
- then
- echo "$0: don't appear to have any devices" >&2
- continue
- fi
- if [ "$opt_d" ]
- then
- echo "$0: can't delete an update" >&2
- continue
- fi
- create=
- delete=
- devs="$devices"
- if [ -f DEVICES ]
- then
- exec 3<DEVICES
- while read device major <&3
- do
- eval now=\$major_$device
- if [ "$now" = "" ]
- then
- delete="$delete `cvt $device`"
- continue
- elif [ "$now" != $major ]
- then
- create="$create "`cvt $device`
- fi
- devs=`strip " $devs " $device`
- # devs=`expr "$devs" : "\(.*\) $device"``expr "$devs" : ".* $device\(.*\)"`
- done
- exec 3<&-
- fi
- create="$create "`cvt $devs`
- [ "$delete" != "" ] && $0 $opts -d $delete
- [ "$create" != " " ] && $0 $opts $create
- [ "$opt_n" ] && continue
- for device in $devices
- do
- if [ "`cvt $device`" ]
- then
- eval echo $device \$major_$device
- fi
- done > DEVICES
- ;;
- *)
- echo "$0: don't know how to make device \"$arg\"" >&2
- ;;
- esac
- done
-
- exit 0
-